<?php 


/**
 * Função responsável pelo CRUD de registro de inscrições dos servidores.
 */
class Remanejamento_Model_Professor
{ 
    
    /**
     * Lista as CRE's - Conselhos regionais de ensino
     * 
     * @return array $result
     */
    public function listarCresExistentes() 
    {
        $tblUniAdm = new Remanejamento_Model_DbTable_Sigrh_UnidadesAdministrativas();
        $slcUniAdm = $tblUniAdm->select();
        $slcUniAdm->from(array('ua' => 'unidades_administrativas'), array('ua.tua_dr', 'ua.tua_subcodigo', 'ua.tua_descricao'), 'sigrh');
        $data = $tblUniAdm->fetchAll($slcUniAdm);

        foreach ($data as $tbl) {
            $result[$tbl->tua_dr .'_'. $tbl->tua_subcodigo] = $tbl->tua_descricao;
        }
        
        return $result;
    }
    
    
    /**
     * Função que irá buscar as habilitações de um determinado professor.
     * -- Este número varia de professor para professor.
     * 
     * @param {string} [$cdMatricula]
     * @return {array} [$result]
     */
    public function listarHabilitacoes($cdMatricula) 
    {
        try {
            $result = array();
            
            if (!empty($cdMatricula)) {
                // Buscando as habilitações correspondentes a um determinado professor.
                $tblHabEmp = new Remanejamento_Model_DbTable_Sigrh_HabilitacoesEmpregados();
                $slcHabEmp = $tblHabEmp->select();
                $slcHabEmp->from(array('habem' => 'habilitacoes_empregados'), array('habem.hab_cd_habilitacao'), 'sigrh')
                          ->joinLeft(array('hab' => 'habilitacoes'), 'habem.hab_cd_habilitacao = hab.thb_cd_habilit', array('hab.tbh_nome'), 'sigrh')
                          ->setIntegrityCheck(false)
                          ->where('emp_cd_matricula = ?', $cdMatricula);
                $data = $tblHabEmp->fetchAll($slcHabEmp);

                // Gera um array com todas as habilitações do professor.
                foreach ($data as $hab) {
                    $result[$hab->hab_cd_habilitacao] = $hab->tbh_nome;
                }
            }
            return $result;
            
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }
    
    
    /**
     * Lista as lotações dos professores.
     * -- BD Sigrh.empregados
     * 
     * @param string $cpf
     */
    public function buscarLotacaoProfessor($cpf) 
    {
        
    }
    
    
    /**
     * Função que irá listar os professores (nome e outras informações.)
     * -- Utilizada em autocomplete de formulários.
     * -- Função que chama outra para que seja feita outras verificações e outras chamadas.
     * 
     * @todo Verificar se apos a conclusao do módulo se esta função ficou redundate
     * @param string $term
     * @return array $result
     */
    public function completeProfessor($term) 
    {
        $result = $this->buscarProfessorPeloCpf($term);
        return $result;
    }
    
    
    /**
     * Função interna para buscar um determinado professor e suas informações de 
     * acordo com o CPF
     * 
     * @param int $term
     * @return array $result
     */
    private function buscarProfessorPeloCpf($term) 
    {
        $tblEmpregado = new Remanejamento_Model_DbTable_Sigrh_Empregados();
        $slcEmpregado = $tblEmpregado->select();
        $slcEmpregado->from(array('emp' => 'empregados'), array('emp_nr_cpf as cpf', 'emp_nome as nome', 'emp_email as email', 'emp_cd_matricula as matricula', 'emp_dt_admissao as dt_admissao', 'emp_cd_lotacao_1', 'emp_dr', 'emp_turno', 'emp_carga_hor', 'emp_lot_definitiva', 'emp_cd_lotacao_2', 'emp_dr_sec', 'emp_turno_sec', 'emp_carga_hor_2', 'emp_lot_definitiva_1'), 'sigrh')
                     ->joinLeft(array('empc' => 'empregados_complementos'), 'emp.emp_cd_matricula = empc.emp_cd_matricula', array("empc.emp_tempo_see as tmpServico"), 'sigrh')
                     ->joinLeft(array('ende' => 'enderecos'), 'emp.emp_cd_matricula = ende.emp_cd_matricula', array('ende.emp_cep as cep', 'ende.emp_endereco as endereco', 'ende.emp_municipio as municipio', 'ende.emp_bairro as bairro', 'ende.emp_uf as estado'), 'sigrh')
                     ->joinLeft(array('lot1' => 'lotacoes'), 'emp.emp_cd_lotacao_1 = lot1.tlo_cd_lotacao', array('tlo_descricao as ds_lotacao_1'), 'sigrh')
                     ->joinLeft(array('lot2' => 'lotacoes'), 'emp.emp_cd_lotacao_2 = lot2.tlo_cd_lotacao', array('tlo_descricao as ds_lotacao_2'), 'sigrh')
                     ->joinLeft(array('lot_sub1' => 'tbl_reman_escola_rural_urbana'), 'emp.emp_cd_lotacao_1 = lot_sub1.cd_lotacao', array('rural_urbana as tp_lotacao_1'), 'remanejamento')
                     ->joinLeft(array('lot_sub2' => 'tbl_reman_escola_rural_urbana'), 'emp.emp_cd_lotacao_2 = lot_sub2.cd_lotacao', array('rural_urbana as tp_lotacao_2'), 'remanejamento')
                     ->setIntegrityCheck(false)
                     ->where('emp_nr_cpf = ?', $term);
        $result = $tblEmpregado->fetchRow($slcEmpregado);
        
        // Verifica se houve resultado na busca.
        if (!empty($result)) {
            $result = $result->toArray();
        }

        // Verificaf retorno
        //$result = $this->_testResultBuscarProfessorPeloCPF();        
        
        return $result;
    }
    
    
    /**
     * função que irá gerar informações fake para verificar se o script do site 
     * esta secomportando de forma correta. 
     * -- Útil na primeira etapa, onde o usuário informa o CPF e recebe informações do professor
     * -- Esta função servirá também de documentação para informações que deverão ser enviadas para a view
     */
    private function _testResultBuscarProfessorPeloCPF() 
    {
        // Inicializando a variável.
        $result = array();
        
        // Área de teste de retorno
        $result[0]['nome']          = 'Teste de Sistema';
        $result[0]['email']         = 'teste@teste.com';
        $result[0]['cpf']           = '01234567890';
        $result[0]['cep']           = '72000-000';
        $result[0]['endereco']      = 'SCS 701 Bloco A Ap.202';
        $result[0]['telefone']      = '1234-9877';
        $result[0]['matricula']     = '2257778';
        $result[0]['tmpServico']    = '10';
        $result[0]['jornada']       = '40';
        
        return $result;
    }
}